﻿/*!
 *  @brief     数据库管理器
 *  @details   该类可根据配置信息创建不同类型的数据库
 *  @author    Will.Yin
 *  @version   v1.0
 *  @date      2022-02-24
 *  @copyright Eoslift.
 *  @note
 */
#ifndef DATABASEMANAGER_H
#define DATABASEMANAGER_H

#include "common_global.h"

#include <QObject>
#include <QSqlDriver>
#include <QSqlError>

#include "databasedatastruct.h"
#include "databaselink.h"

namespace Common {

class COMMONSHARED_EXPORT DatabaseManager : public QObject
{
    Q_OBJECT
public:
    explicit DatabaseManager(QObject *parent = nullptr);
    ~DatabaseManager();

public:
    /**
     * @brief 设置数据库配置信息
     * @param info
     */
    void setDbParameter(DatabaseParameter info);

    /**
     * @brief 获取数据库配置信息
     * @return
     */
    DatabaseParameter getDbParameter();

    /**
     * @brief   createDatabase 创建数据库
     * @param   数据库连接名
     * @return
     */
    DatabaseLink * createDatabase(QString name = "");

    /**
     * @brief   hasFeature 查询当前数据库是否支持指定的功能
     * @param[in] feature 待查询的功能
     * @return 是否支持指定的功能
     */
    bool hasFeature(QSqlDriver::DriverFeature feature);

    /**
     * @brief  availableDrivers 获取数据库驱动
     * @return
     */
    QStringList availableDrivers();

private:
    DatabaseParameter m_databaseConfigInfo;                    /*!< 数据库配置信息 */
};

}//namespace Database

#endif // DATABASEMANAGER_H
